using Sinacor.Infra.UI.Common;
using Sinacor.UI.Bovespa.Parametro.Communication.Bovespa.Ordens.Mensagem;
using Sinacor.Infra.UI.Security.Services;
using System;
using System.Collections.Generic;
using Sinacor.UI.Bovespa.Parametro.Communication.Bovespa.Ordens.Ordem;

namespace Sinacor.UI.Bovespa.Parametro.Communication
{
	public class Mensagem : BaseCommunication
    {

		public Mensagem(SessionInformation session)
            : base(session){}

        public ModelCollection<Model.Mensagem> ConsultarMensagensJustificativaObservacao(Model.Parameter.FiltroMensagemJustificativaObservacao parameter)
        {
            IOrdem servicoOrdem = null;

            IMensagem servico = null;

            try
            {
                using (ServiceInstance<IOrdem> service = new ServiceInstance<IOrdem>())
                {
                    servicoOrdem = service.TryGetInstance(this.Session);

                    Communication.Translator.DataContractToModel.Ordem _translatorDataContractToModel1 = new Sinacor.UI.Bovespa.Parametro.Communication.Translator.DataContractToModel.Ordem();
                    Communication.Translator.ModelToDataContract.Ordem _translatorModelToDataContract1 = new Sinacor.UI.Bovespa.Parametro.Communication.Translator.ModelToDataContract.Ordem();

                    List<Sinacor.UI.Bovespa.Parametro.Communication.Bovespa.Ordens.Ordem.MensagemResponse> _listaRetorno1 = new List<Sinacor.UI.Bovespa.Parametro.Communication.Bovespa.Ordens.Ordem.MensagemResponse>();
                    _listaRetorno1 = servicoOrdem.ConsultarMensagensJustificativaObservacao();
                }
            }
            catch (Exception ex)
            {
                base.HandleFault(ex);
            }


            ModelCollection<Sinacor.UI.Bovespa.Parametro.Model.Mensagem> response = null;

            try
            {
                using (ServiceInstance<IMensagem> service = new ServiceInstance<IMensagem>())
                {
                    servico = service.TryGetInstance(this.Session);
                    
                    Communication.Translator.DataContractToModel.Mensagem _translatorDataContractToModel = new Sinacor.UI.Bovespa.Parametro.Communication.Translator.DataContractToModel.Mensagem();
                    Communication.Translator.ModelToDataContract.Mensagem _translatorModelToDataContract = new Sinacor.UI.Bovespa.Parametro.Communication.Translator.ModelToDataContract.Mensagem();
                    Communication.Bovespa.Ordens.Mensagem.FiltroMensagemJustificativaObservacaoRequest _request = new FiltroMensagemJustificativaObservacaoRequest();

                    _request = _translatorModelToDataContract.ToFiltroMensagemJustificativaObservacaoRequest(parameter);

                    List<Sinacor.UI.Bovespa.Parametro.Communication.Bovespa.Ordens.Mensagem.MensagemResponse> _listaRetorno = new List<Sinacor.UI.Bovespa.Parametro.Communication.Bovespa.Ordens.Mensagem.MensagemResponse>();
                    _listaRetorno = servico.ConsultarMensagensJustificativaObservacao(_request);
                    return _translatorDataContractToModel.ToMensagem(_listaRetorno);
                }
            }
            catch (Exception ex)
            {
                base.HandleFault(ex);
            }

            return response;
		}
	}
}